package proyecto.web;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import proyecto.excepcion.DAOExcepcion;
import proyecto.modelo.Cine;
import proyecto.service.CineService;
import proyecto.service.DepartamentoService;
import proyecto.service.DistritoService;
import proyecto.service.PaisService;
import proyecto.service.ProvinciaService;

public class CineController extends MultiActionController {

	//Declaracion de variables
	CineService cineService;
	PaisService paisService;
	DepartamentoService departamentoService;
	ProvinciaService provinciaService;
	DistritoService distritoService;
	
	//Setters y Getters
	public CineService getCineService() {
		return cineService;
	}

	public void setCineService(CineService cineService) {
		this.cineService = cineService;
	}

	public PaisService getPaisService() {
		return paisService;
	}

	public void setPaisService(PaisService paisService) {
		this.paisService = paisService;
	}

	public DepartamentoService getDepartamentoService() {
		return departamentoService;
	}

	public void setDepartamentoService(DepartamentoService departamentoService) {
		this.departamentoService = departamentoService;
	}

	public ProvinciaService getProvinciaService() {
		return provinciaService;
	}

	public void setProvinciaService(ProvinciaService provinciaService) {
		this.provinciaService = provinciaService;
	}

	public DistritoService getDistritoService() {
		return distritoService;
	}

	public void setDistritoService(DistritoService distritoService) {
		this.distritoService = distritoService;
	}

	//Metodo Controller
	public ModelAndView index(HttpServletRequest request, HttpServletResponse response) {
		try {
			request.setAttribute("listaCine", cineService.listar());
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
        return new ModelAndView("CineBusqueda");
    }

	public ModelAndView nuevo(HttpServletRequest request, HttpServletResponse response) {
		try {
			request.setAttribute("listaPais", paisService.listar());
			request.setAttribute("listaDepartamento", departamentoService.listar());
			request.setAttribute("listaProvincia", provinciaService.listar());
			request.setAttribute("listaDistrito", distritoService.listar());
			request.setAttribute("MODO", "NEW");
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
        return new ModelAndView("CineMantenimiento");
    }

	public ModelAndView grabar(HttpServletRequest request, HttpServletResponse response) {
		String mensaje;
		
		String codigo = request.getParameter("txtCodigo");
		String pais = request.getParameter("cboPais");
		String nombre = request.getParameter("txtNombre");
		String departamento = request.getParameter("cboDepartamento");
		String direccion = request.getParameter("txtDireccion");
		String provincia = request.getParameter("cboProvincia");
		String numSalas = request.getParameter("txtNumSalas");
		String distrito = request.getParameter("cboDistrito");
		
		String modo = request.getParameter("MODO");
		
		try {
			Cine cine = new Cine();
			cine.setCoCine(codigo);
			cine.setCoDepartamento(departamento);
			cine.setCoPais(pais);
			cine.setCoProvincia(provincia);
			cine.setDireccion(direccion);
			cine.setDistrito(distritoService.obtenerPorCodigo(distrito));
			
			cine.setNombre(nombre);
			cine.setNroSalas(Integer.parseInt(numSalas));
			
			if(modo.equals("NEW")){
				cineService.registrar(cine);
				mensaje = "Se registro correctamente";	
			}else{
				cineService.actualizar(cine);
				mensaje = "Se grabo correctamente";
			}
		} catch (DAOExcepcion e) {
			e.printStackTrace();
			if(modo.equals("NEW")){
				mensaje = "Error al registrar Cine (" + e.getMessage() + ")";	
			}else{
				mensaje = "Error al grabar Cine (" + e.getMessage() + ")";
			}
		}
		
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("mensaje", mensaje);
		
	    return index(request,response).addAllObjects(params);
    }

	public ModelAndView actualizar(HttpServletRequest request, HttpServletResponse response) {
		try {
			String codigo = request.getParameter("codigo");

			Cine objCine = cineService.obtenerPorCodigo(codigo);
			request.setAttribute("objCine", objCine);
			
			request.setAttribute("listaPais", paisService.listar());
			request.setAttribute("listaDepartamento", departamentoService.listar());
			request.setAttribute("listaProvincia", provinciaService.listar());
			request.setAttribute("listaDistrito", distritoService.listar());
			request.setAttribute("MODO", "UPDATE");
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
        return new ModelAndView("CineMantenimiento");
    }

	public ModelAndView eliminar(HttpServletRequest request, HttpServletResponse response) {
		try {
			String codigo = request.getParameter("codigo");
			cineService.eliminar(codigo);
		} catch (DAOExcepcion e) {
			e.printStackTrace();
		}
        return index(request,response);
    }
}
